package com.dp1.pucp.Administracion.Controlador;

import CharliesCookies.MainController;
import com.dp1.pucp.Administracion.DAO.RRHHDAO;
import com.dp1.pucp.Administracion.Vista.OperarioGUI;
import com.dp1.pucp.Administracion.Vista.SuperHombreGUI;
import com.dp1.pucp.Modelo.Clases.Distrito;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import com.dp1.pucp.Modelo.Clases.Empleado;
import com.dp1.pucp.Modelo.Clases.Provincia;
import com.dp1.pucp.Modelo.Clases.Superhombre;
import com.dp1.pucp.Seguridad.DAO.LogDAO;
import com.dp1.pucp.Simulacion.DAO.SimulacionDAO;
import com.dp1.pucp.Util.Validaciones;
import java.util.ArrayList;
import javax.swing.JFrame;

public class OperarioControlador {

    private RRHHDAO m;
    private OperarioGUI EmpleadoView;
    private Empleado emp;
    private BuscarRRHHControlador EmpleadoControlador;
    private SuperHombreGUI superHombreView;
    private JFrame padre;
    private Superhombre superhombre;

    public OperarioControlador(RRHHDAO dao, OperarioGUI view, BuscarRRHHControlador buc, Empleado empleado) {
        m = dao;
        EmpleadoView = view;
        EmpleadoControlador = buc;
        superHombreView = new SuperHombreGUI(getPadre(), true);
        emp = empleado;
        EmpleadoView.llenaCodigo(m.llenaCodigo(emp));
        EmpleadoView.llenaComboEstado(m.listarTipoDoc());
        EmpleadoView.llenaComboDepartamento(m.listarDepartamento());
        EmpleadoView.llenaComboProvincia(m.listarProvincia(EmpleadoView.getDepartamento()));
        EmpleadoView.llenaComboDistrito(m.listarDistrito(EmpleadoView.getProvincia()));
        EmpleadoView.llenaComboTurno(m.listarTurno());
        EmpleadoView.llenaComboTipoEmp(m.listarTipoEmpleado());

        if (empleado != null) {
            EmpleadoView.setTitle("Editar Empleado");
        } else {
            EmpleadoView.setTitle("Agregar Empleado");
        }
        EmpleadoView.setFormEmpleado(emp);

        if (empleado != null) {
            System.out.println(empleado.getDistrito().getProvincia().getDepartamento().getNombre());
            EmpleadoView.setDepartamento(empleado.getDistrito().getProvincia().getDepartamento().getIddepartamento());
            int indiceProv = 0;
            ArrayList<Provincia> provincias = this.m.listarProvincia(empleado.getDistrito().getProvincia().getDepartamento());
            EmpleadoView.llenaComboProvincia(provincias);
            for (int i = 0; i < provincias.size(); i++) {
                if (provincias.get(i).getIdprovincia() == empleado.getDistrito().getProvincia().getIdprovincia()) {
                    indiceProv = i;
                    break;
                }
            }
            EmpleadoView.setProvincia(indiceProv);
            int indiceDistrito = 0;
            ArrayList<Distrito> distritos = this.m.listarDistrito(empleado.getDistrito().getProvincia());
            EmpleadoView.llenaComboDistrito(distritos);
            for (int i = 0; i < distritos.size(); i++) {
                if (distritos.get(i).getIddistrito() == empleado.getDistrito().getIddistrito()) {
                    indiceDistrito = i;
                    break;
                }
            }
            EmpleadoView.setDistrito(indiceDistrito);
            if (empleado != null) {
                SimulacionDAO s = new SimulacionDAO();
                Superhombre superhombre1 = s.getSuperHombre(emp.getIdempleado());     
                if (superhombre1.getIdsuperhombre()!=0){
                    superHombreView.setPHorneado(superhombre1.getProduccionHorneado());
                    superHombreView.setPDecorado(superhombre1.getProduccionDecorado());
                    superHombreView.setPRellenado(superhombre1.getProduccionRellenado());
                    superHombreView.setPEmpaquetado(superhombre1.getProduccionEmpaquetado());
                    superHombreView.setMHorneado(superhombre1.getMermaHorneado());
                    superHombreView.setMDecorado(superhombre1.getMermaDecorado());
                    superHombreView.setMRellenado(superhombre1.getMermaRellenado());
                    superHombreView.setMEmpaquetado(superhombre1.getMermaEmpaquetado());
                }
            }
        }

        EmpleadoView.addCancelarListener(new cancelarListener());
        EmpleadoView.addLimpiarListener(new limpiarListener());
        EmpleadoView.addGuardarListener(new guardarEmpleadoListener());
        EmpleadoView.addSeleccionDepartamentoListener(new seleccionDepartamentoListener());
        EmpleadoView.addSeleccionProvinciaListener(new seleccionProvinciaListener());
        EmpleadoView.addSuperHombreListener(new superHombreListener());
        EmpleadoView.addComboTipoListener(new comboTipoListener());
        
        superHombreView.addGuardarListener(new guardarSuperHombreListener());
        superHombreView.addCancelarListener(new cancelarSuperHombreListener());

    }

    public JFrame getPadre() {
        return this.padre;
    }

    public String mensajeError() {
        String mensaje = "Corregir los siguientes datos:";

        if (EmpleadoView.getNombre().isEmpty()) {
            mensaje += "\n- Ingresar Nombre";
        }

        if (EmpleadoView.getApPaterno().isEmpty()) {
            mensaje += "\n- Ingresar Apellido Paterno";
        }

        if (EmpleadoView.getApMaterno().isEmpty()) {
            mensaje += "\n- Ingresar Apellido Materno";
        }

        if (EmpleadoView.getNumDocumento().isEmpty()) {
            mensaje += "\n- Ingresar Número de Documento";
        }

        if (EmpleadoView.getFechaNac() == null) {
            mensaje += "\n- Ingresar Fecha de Nacimiento";
        }

        if (EmpleadoView.getSueldo().isEmpty()) {
            mensaje += "\n- Ingresar Sueldo";
        }

        if (EmpleadoView.getTelefono().isEmpty()) {
            mensaje += "\n- Ingresar Teléfono";
        }

        if (EmpleadoView.getCelular().isEmpty()) {
            mensaje += "\n- Ingresar Celular";
        }

        if (EmpleadoView.getCorreo().isEmpty()) {
            mensaje += "\n- Ingresar Correo";
        }

        if (EmpleadoView.getDireccion().isEmpty()) {
            mensaje += "\n- Ingresar Dirección";
        }


        return mensaje;
    }

    public String mensajeErrorSuperHombre() {
        String mensaje = "Corregir los siguientes datos:";

        if (superHombreView.getPHorneado().isEmpty()) {
            mensaje += "\n- Producción Horneado";
        }

        if (superHombreView.getPDecorado().isEmpty()) {
            mensaje += "\n- Producción Decorado";
        }

        if (superHombreView.getPRellenado().isEmpty()) {
            mensaje += "\n- Producción Rellenado";
        }

        if (superHombreView.getPEmpaquetado().isEmpty()) {
            mensaje += "\n- Producción Empaquetado";
        }

        if (superHombreView.getMHorneado().isEmpty()) {
            mensaje += "\n- Merma Horneado";
        }

        if (superHombreView.getMDecorado().isEmpty()) {
            mensaje += "\n- Merma Decorado";
        }

        if (superHombreView.getMRellenado().isEmpty()) {
            mensaje += "\n- Merma Rellenado";
        }

        if (superHombreView.getMEmpaquetado().isEmpty()) {
            mensaje += "\n- Merma Empaquetado";
        }

        return mensaje;
    }

    class guardarEmpleadoListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            Empleado a = new Empleado();
            if (!(EmpleadoView.getNombre().isEmpty() || EmpleadoView.getApPaterno().isEmpty()
                    || EmpleadoView.getApMaterno().isEmpty() || EmpleadoView.getCelular().isEmpty()
                    || EmpleadoView.getTelefono().isEmpty() || EmpleadoView.getDireccion().isEmpty()
                    || EmpleadoView.getNumDocumento().isEmpty() || EmpleadoView.getSueldo().isEmpty())) {
                a.setIdempleado(EmpleadoView.empleado.getIdempleado());
                a.setNombre(Validaciones.toCamelCase(EmpleadoView.getNombre().toLowerCase()));
                a.setApMaterno(Validaciones.toCamelCase(EmpleadoView.getApMaterno().toLowerCase()));
                a.setApPaterno(Validaciones.toCamelCase(EmpleadoView.getApPaterno().toLowerCase()));
                a.setCodigo(EmpleadoView.getCodigo());
                a.setCorreo(EmpleadoView.getCorreo());
                a.setCelular(EmpleadoView.getCelular());
                a.setTelefono(EmpleadoView.getTelefono());
                a.setDireccion(EmpleadoView.getDireccion());
                a.setDistrito(EmpleadoView.getDistrito());
                a.setEstado(1);
                a.setTipoempleado(EmpleadoView.getTipoEmp()+1);
                a.setNumdocumento(EmpleadoView.getNumDocumento());

                a.setFechanac(EmpleadoView.getFechaNac());
                a.setSueldo(Float.parseFloat(EmpleadoView.getSueldo()));
                a.setTurnoTrabajo(EmpleadoView.getTurno() + 1);

                a.setTipodocumento(EmpleadoView.getTipoDocumento());

                int confirmacion;
                if (emp != null) {
                    confirmacion = Validaciones.solicitarConfirmacionVal("¿Está seguro que desea modificar el empleado?");
                    if (confirmacion == 0) {
                        a.setIdempleado(emp.getIdempleado());
                        m.guardarEmpleado(a);
                        SimulacionDAO s = new SimulacionDAO();
                        Superhombre superhombre1 = s.getSuperHombre(emp.getIdempleado());
                        if (superhombre != null ) {//guardando parametros de superhombre
                            if (superhombre1.getIdsuperhombre() != 0){                              
                                superhombre1.setEstado(superhombre.getEstado());
                                superhombre1.setProduccionHorneado(superhombre.getProduccionHorneado());
                                superhombre1.setProduccionDecorado(superhombre.getProduccionDecorado());
                                superhombre1.setProduccionRellenado(superhombre.getProduccionRellenado());
                                superhombre1.setProduccionEmpaquetado(superhombre.getProduccionEmpaquetado());
                                superhombre1.setMermaHorneado(superhombre.getMermaHorneado());
                                superhombre1.setMermaDecorado(superhombre.getMermaDecorado());
                                superhombre1.setProduccionRellenado(superhombre.getMermaDecorado());
                                superhombre1.setMermaEmpaquetado(superhombre.getMermaEmpaquetado());
                                m.guardarSuperHombre(superhombre1);
                            }else{
                                superhombre.setEmpleado(a);
                                m.guardarSuperHombre(superhombre);                          
                            }                          
                        }
                        EmpleadoView.mostrarAviso("Se modificó exitosamente el empleado.");
                        LogDAO.insertarLog(MainController.usuario, "Editar Empleado");
                        EmpleadoView.dispose();
                    }
                } else {
                    confirmacion = Validaciones.solicitarConfirmacionVal("¿Está seguro que desea agregar el empleado?");
                    if (confirmacion == 0) {
                        m.guardarEmpleado(a);
                        if (superhombre != null) {//guardando parametros de superhombre
                            superhombre.setEmpleado(a);
                            m.guardarSuperHombre(superhombre);
                        }
                        EmpleadoView.mostrarAviso("Se guardó exitosamente el empleado.");
                        LogDAO.insertarLog(MainController.usuario, "Agregar Empleado");
                        EmpleadoView.dispose();
                    }
                }

            } else {
                EmpleadoView.mostrarAviso(mensajeError());
            }
        }
    }

    class cancelarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int salida;
            if (emp != null) {
                salida = Validaciones.solicitarConfirmacionSalida("modificar empleado");
                if (salida == 0) {
                    LogDAO.insertarLog(MainController.usuario, "Salir modificar empleado");
                    EmpleadoView.dispose();
                }
            } else {
                salida = Validaciones.solicitarConfirmacionSalida("agregar empleado");
                if (salida == 0) {
                    LogDAO.insertarLog(MainController.usuario, "Salir agregar empleado");
                    EmpleadoView.dispose();
                }
            }
        }
    }

    class limpiarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            EmpleadoView.LimpiarDatos();
        }
    }

    class seleccionDepartamentoListener implements ItemListener {

        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                EmpleadoView.llenaComboProvincia(m.listarProvincia(EmpleadoView.getDepartamento()));
            }
        }
    }

    class seleccionProvinciaListener implements ItemListener {

        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {

                EmpleadoView.llenaComboDistrito(m.listarDistrito(EmpleadoView.getProvincia()));
            }
        }
    }

    public //INICIO METODOS DE SUPER HOMBRE
            class superHombreListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            //superHombreView = new SuperHombreGUI(getPadre(),true);
            superHombreView.setVisible(true);//se muestra   
//            if (emp != null) {
//                SimulacionDAO s = new SimulacionDAO();
//                Superhombre superhombre1 = s.getSuperHombre(emp.getIdempleado());     
//                if (superhombre1.getIdsuperhombre()!=0){
//                    superHombreView.setPHorneado(superhombre1.getProduccionHorneado());
//                    superHombreView.setPDecorado(superhombre1.getProduccionDecorado());
//                    superHombreView.setPRellenado(superhombre1.getProduccionRellenado());
//                    superHombreView.setPEmpaquetado(superhombre1.getProduccionEmpaquetado());
//                    superHombreView.setMHorneado(superhombre1.getMermaHorneado());
//                    superHombreView.setMDecorado(superhombre1.getMermaDecorado());
//                    superHombreView.setMRellenado(superhombre1.getMermaRellenado());
//                    superHombreView.setMEmpaquetado(superhombre1.getMermaEmpaquetado());
//                }
//            }
        }
    }

    class guardarSuperHombreListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            superhombre = new Superhombre();//dato de superhombre
            if (!(superHombreView.getPHorneado().isEmpty() || superHombreView.getPDecorado().isEmpty()
                    || superHombreView.getPRellenado().isEmpty() || superHombreView.getPEmpaquetado().isEmpty()
                    || superHombreView.getMHorneado().isEmpty() || superHombreView.getMDecorado().isEmpty()
                    || superHombreView.getMRellenado().isEmpty() || superHombreView.getMEmpaquetado().isEmpty())) {
                superhombre.setEstado(1);//estado de superhombre
                superhombre.setProduccionHorneado(Integer.parseInt(superHombreView.getPHorneado()));
                superhombre.setProduccionDecorado(Integer.parseInt(superHombreView.getPDecorado()));
                superhombre.setProduccionRellenado(Integer.parseInt(superHombreView.getPRellenado()));
                superhombre.setProduccionEmpaquetado(Integer.parseInt(superHombreView.getPEmpaquetado()));
                superhombre.setMermaHorneado(Integer.parseInt(superHombreView.getMHorneado()));
                superhombre.setMermaDecorado(Integer.parseInt(superHombreView.getMDecorado()));
                superhombre.setMermaRellenado(Integer.parseInt(superHombreView.getMRellenado()));
                superhombre.setMermaEmpaquetado(Integer.parseInt(superHombreView.getMEmpaquetado()));
                superHombreView.mostrarAviso("Se guardaron exitosamente los parametros del Super Hombre");
                superHombreView.dispose();
            } else {
                superHombreView.mostrarAviso(mensajeErrorSuperHombre());
            }
        }
    }

    class cancelarSuperHombreListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int salida = Validaciones.solicitarConfirmacionSalida("crear parámetros Super Hombre");
            if (salida == 0) {
                superHombreView.dispose();
            }
        }
    }
    //FIN METODOS DE SUPER HOMBRE

    class comboTipoListener implements ItemListener {

        @Override
        public void itemStateChanged(ItemEvent e) {
            if (EmpleadoView.getTipoEmp() == 1) {
                EmpleadoView.inhabilitarBoton();
            } else {
                EmpleadoView.habilitarBoton();
            }
        }
    }
}
